package com.ken.teacher.controller;

import com.ken.common.pojo.*;
import com.ken.common.pojo.Class;
import com.ken.common.result.Result;
import com.ken.teacher.dto.*;
import com.ken.teacher.service.teacherService;
import com.ken.teacher.vo.attendanceVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@Slf4j
@RequestMapping("/teacher")
public class teacherController {
    @Autowired
    private teacherService teacherService;

    /**
     * 创建班级接口
     * @param dto 传入创建者的工号（默认是老师）
     * @return 返回创建信息
     * @throws Exception
     */
    @PostMapping("/createClass")
    public Result<Class> createClass(@RequestBody createClassDto dto) throws Exception {
        return teacherService.createClass(dto);
    }

    /**
     * 创建课程
     * @param dto 创建课程所需的数据
     * @return 返回创建的课程的id
     * @throws Exception
     */
    @PostMapping("/create_course")
    public Result<String> create_course(@RequestBody create_courseDto dto) throws Exception {
        String course = teacherService.create_course(dto);
        return Result.success(course);
    }

    /**
     * 保存考勤信息
     * @param noSignIn 包含未考勤学生的考勤信息
     * @return
     */
//    @PostMapping("/saveInformation")
//    public Result<String> saveInformation(@RequestBody ArrayList<noSignInDto> noSignIn){
//        return teacherService.saveInformation(noSignIn);
//    }

    /**
     * 创建题目
     * @param question 内涵创建题目所需的属性
     * @return 返回创建题目的id
     */
    @PostMapping("/createQuestion")
    public Result<String> create_Questions(@RequestBody Question question){
        return teacherService.createQuestion(question);
    }

    /**
     * 创建作业接口
     * @param homework 包含创建作业所需字段
     * @return 返回创建作业的id
     */
    @PostMapping("/create_homework")
    public Result<String> create_homework(@RequestBody homeworkDto homework){
        return teacherService.create_homework(homework);
    }

    /**
     * 发布作业接口
     * @param dto 发布作业所属的数据
     * @return 创建情况
     */
    @PostMapping("/post_homework")
    public Result<String> post_homework(@RequestBody post_homeworkDto dto){
        return teacherService.post_homework(dto);
    }

    /**
     * 添加题目到作业
     * @param dto 添加所需的信息
     * @return
     */
    @PostMapping("/add_question")
    public Result<String> add_question(@RequestBody add_questionDto dto){
        return teacherService.add_question(dto);
    }

    /**
     * 创建试卷
     * @param paper 包含创建试卷所需的字段
     * @return 返回试卷的id
     */
    @PostMapping("/create_paper")
    public Result<String> create_paper(@RequestBody paper paper){
        return teacherService.create_paper(paper);
    }

    /**
     * 添加题目到试卷
     * @param questionDto 添加所需的属性
     * @return
     */
    @PostMapping("/add_paperQuestion")
    public Result<String> add_paperQuestion(@RequestBody add_paperQuestionDto questionDto){
        return teacherService.add_paperQuestion(questionDto);
    }

    /**
     * 发布考试
     * @param exam
     * @return 返回的data为发布的考试的id
     */
    @PostMapping("/post_exam")
    public Result<String> post_exam(@RequestBody examDto exam){
        return teacherService.post_exam(exam);
    }

    /**
     * 用于当作业过期时改变作业的状态
     * @param dto 输入要改的作业或考试的id状态与类型
     * @return
     */
    @PostMapping("/change_status")
    public Result<String> change_status(change_statusDto dto){
        teacherService.change_status(dto);
        return Result.success("更改成功");
    }

    /**
     * 用于批改作业的接口
     * @param assignmentDto 如果题目是应用题或者主观题is_corrected可以选填
     * @return
     */
    @PostMapping("/grade_assignments")
    public Result<String> grade_assignments(grade_assignmentDto assignmentDto){
        teacherService.grade_assignments(assignmentDto);
        return Result.success("批改成功");
    }

    /**
     * 创建单元
     * @param unit 创建单元
     * @return 返回单元的id
     */
    @PostMapping("/create_unit")
    public Result<String> create_unit(@RequestBody unitDto unit){
        String id = teacherService.create_unit(unit);
        return Result.success(id);
    }

    /**
     * 创建课时
     * @param dto 创建课时所需要的字段
     * @return 返回创建的课时的id
     */
//    @PostMapping("/create_lesson")
//    public Result<String> create_lesson(@RequestBody create_lessonDto dto){
//        String lessonId = teacherService.create_lesson(dto);
//        return Result.success(lessonId);
//    }

    /**
     * 利用老师获取所有相关课程
     * @param teacher_id 老师id
     * @return 课程数组
     */
    @GetMapping("/getCourseByTeacherId")
    public Result<List<course>> getCourseByTeacherId(@Param("teacher_id") String teacher_id){
        System.out.println(teacher_id);
        List<course> courses = teacherService.getCourseByTeacherId(teacher_id);
        return Result.success(courses);
    }

    /**
     * 批量创建题目
     * @param questions 创建题目所需的数据
     * @return 一个数组，包含所有题目的id
     */
    @PostMapping("/create_questions")
    public Result<List<String>> create_questions(@RequestBody List<Question> questions){
        List<String> ids = teacherService.create_questions(questions);
        return Result.success(ids);
    }

    /**
     * 修改作业接口
     * @param dto 修改作业所需的数据
     * @return 返回修改情况
     */
    @PostMapping("/update_question")
    public Result<String> update_question(@RequestBody update_questionDto dto){
        teacherService.update_question(dto);
        return Result.success("修改成功");
    }

    /**
     * 发布消息接口
     * @param message 消息的内容
     * @return 返回发布信息
     */
    @PostMapping("/post_message")
    public Result<String> post_message(@RequestBody message message){
        teacherService.post_message(message);
        return Result.success("消息发布成功");
    }

    /**
     * 发布签到接口
     * @param dto 发布签到所需的数据
     * @return 返回班级的签到情况和签到码的url
     * @throws Exception
     */
    @PostMapping("/post_attendance")
    public Result<attendanceVo> post_attendance(@RequestBody attendanceDto dto) throws Exception {
        attendanceVo attendanceVo = teacherService.post_attendance(dto);
        return Result.success(attendanceVo);
    }

    /**
     * 创建课时
     * @param lesson 课时信息
     * @return 返回创建课时的情况
     */
    @PostMapping("/create_lessons")
    public Result<String> create_lessons(@RequestBody lessons lesson){
        log.info(lesson.toString());
        teacherService.create_lessons(lesson);
        return Result.success("创建成功");
    }

    /**
     * 修改课程信息
     * @param lesson 课程信息
     * @return 修改结果
     */
    @PostMapping("/update_lesson")
    public Result<String> update_lesson(@RequestBody lessons lesson){
        log.info(lesson.toString());
        teacherService.update_lesson(lesson);
        return Result.success("修改成功");
    }

    /**
     * 更新单元信息
     * @param unit 单元信息
     * @return 返回更新情况
     */
    @PostMapping("/update_unit")
    public Result<String> update_unit(@RequestBody unit unit){
        teacherService.update_unit(unit);
        return Result.success("更新成功");
    }

    /**
     * 删除课时
     * @param lesson_id 课时id
     * @return 返回删除结果
     */
    @DeleteMapping("/delete_lesson")
    public Result<String> delete_lesson(@RequestParam("lesson_id") String lesson_id){
        teacherService.delete_lesson(lesson_id);
        return Result.success("删除成功");
    }

    /**
     * 删除单元
     * @param unit_id 单元id
     * @return 返回删除结果
     */
    @DeleteMapping("/delete_unit")
    public Result<String> delete_unit(@RequestParam("unit_id") String unit_id){
        teacherService.delete_unit(unit_id);
        return Result.success("删除成功");
    }

    /**
     * 创建教案
     * @param courseware 教案信息
     * @return 返回教案的信息
     */
    @PostMapping("/creat_courseware")
    public Result<String> creat_courseware(@RequestBody courseware courseware){
        String serviceCourseware = teacherService.create_courseware(courseware);
        return Result.success(serviceCourseware);
    }

    /**
     * 修改教案
     * @param courseware 教案信息
     * @return 返回修改结果
     */
    @PostMapping("/update_courseware")
    public Result<String> update_courseware(@RequestBody courseware courseware){
        teacherService.update_courseware(courseware);
        return Result.success("修改成功");
    }

    /**
     * 获取教案
     * @param dto 限制条件
     * @return 返回教案
     */
    @PostMapping ("/getCourseware")
    public Result<List<courseware>> getCourseware(@RequestBody getCourseDto dto){
        List<courseware> coursewares = teacherService.getCourseware(dto.getTeacher_id(), dto.getCourseware_id(),dto.getCourse_id());
        return Result.success(coursewares);
    }

    /**
     * 上传资源
     * @param resources 资源信息
     * @return 返回资源的id
     */
    @PostMapping("/post_resources")
    public Result<String> post_resources(@RequestBody resources resources){
        return Result.success(teacherService.post_resources(resources));
    }

    /**
     * 获取资源接口
     * @param dto 信息
     * @return 返回获取结果
     */
    @PostMapping("/get_resources")
    public Result<List<resources>> get_resources(@RequestBody get_resourcesDto dto){
        List<resources> resources = teacherService.get_resources(dto.getClass_id(), dto.getResources_id());
        return Result.success(resources);
    }
}
